package com.itheima.dao;

import com.itheima.bean.User;
import com.itheima.bean.UserVo;

import java.util.List;
import java.util.Map;

public interface UserDao {

    /**
     * 查询所有用户
     * @return
     */
    public List<User> findAll();

    /**
     * 查询所有用户信息,用户信息中包含他所收藏的线路
     * @return
     */
    public List<User> findWithFavoriteAll();

    /**
     * 添加用户
     * @param user
     */
    public void add(User user);

    /**
     * 更新用户    -- 如果属性有值九更新,如果没有值就不更新
     * {name:xxx,password:xxx}
     * update tab_user set name = ? ,password = ?
     * @param user
     */
    public void update(User user);


    /**
     * 根据用户姓名模糊查询用户信息
     * @param name
     * @return
     */
    public List<User> findLikeName(String name);


    /**
     * 搜索用户   可能根据姓名搜索   也可能根据email搜索
     * {name:xxx,email:xxx}
     * @param user
     * @return
     */
    public List<User> serachUser(User user);

    /**
     * 批量删除功能
     * 1. 传入一个pojo对象,类中包含一个集合或者数组类型的属性
     * 2. 传入一个map集合,map集合中包含一个值为数组或者list集合的键值对儿
     * 3. 直接传入一个list集合对象
     * 4. 传入一个数组(可变参数)
     */
    public void deleteByUserVo(UserVo uv);

    /**
     * map中一定包含一个key为ids的键值对
     * @param map
     */
    public void deleteByMap(Map<String,Object> map);

    /**
     * list集合总就是需要删除的用户的id
     * @param list
     */
    public void deleteByList(List<Integer> list);

    /**
     * 传入可变参数,可变参数的本质就是一个数组
     * @param ids
     */
    public void deleteByIds(Integer... ids);

    /**
     * 查询所有用户信息,其中包含用户收藏的旅游线路信息
     * @return
     */
    public List<User> findAllWithFavorite();

}
